git apply xxx.patch 失败时的几种解决方式

您所在的位置:网站首页 git patch 冲突 git apply xxx.patch 失败时的几种解决方式

git apply xxx.patch 失败时的几种解决方式

2023-06-13 14:57| 来源: 网络整理| 查看: 265

/如图,在git apply xxx.patch时报错,提示在xxx文件的xxx行有错误,xxx.patch not apply;

 然后在apply 时加上参数 -v 查看详情;

此处打印的是该patch基于的原文件的内容,表示在当前文件中搜索不到此段内容;

打开patch文件和出错的文件,在错误的文件里找到出错的行数,在patch文件里搜索第一次出现该行数(数字)的地方;

以下是第一种情况:patch中的内容的改动都是新增的行,且patch原文件多出内容行(解决方式是删除patch原文件多出的内容行);

如此处的patch文件的610行,-2007,8 表示从原文件的2007行开始的8行内容;+2080,14表示更新的文件为从2080行开始的14行内容;其中主要关注2007,8,14即可,+2080不是很准确的,因为2080只是参考值;14 - 8 = 6,说明原文件和patch之间改变了6行,再结合622行,623行,624行,627行,628行,629行可知,确实是增加了6行;(patch 文件里的第一列的+ 代表相对原文件是增加,- 则代表相对原文件是删除,没有特殊字符的则是原文件内容);

由此可见原文件的2007行并不匹配patch文件的619行,因此需要在原文件中找到匹配patch文件的619行到621行的内容;

 如图所示,已在原文件中找到匹配patch文件中的619行到621行的地方;通过对比可看出,除了patch中有+标记的新增行外,patch文件的631行到632行不匹配原文件的1953行到1954行,也就是patch文件的原文件内容多了631这一行,所以有两种解决方式,

删掉patch文件中的631行在原文件中增加patch文件中的631行的内容

 从patch文件的631行可知,该行只是一个注释符,因此决定采用第一种方式,删掉patch文件的631行(删掉前备份一份patch文件);删掉后需要修改patch文件的618行,如下

 除了删掉patch的631行外,将-2007,8 +2080,14 改成了-2007,7 +2080,13

 可见再次apply时,不再报2007行的错误了;报了另一个错误,emac_main.c 3344行

以下是第二种情况:patch中的内容的改动都是新增的行,新增行中有与当前文件行内容不同的行(解决方式是根据上下文取舍行,粘贴时注意patch原文件内容首字节要是空格);

结合搜索的原文件内容和patch内容以及当前文件的内容,可知patch的1098行与当前文件的3246行的内容不一致,而该行的内容也只是注释内容,所以解决方式就是:

将当前文件的3246行替换patch的1098行即可

 删除patch的1098行,再把当前文件的3246行粘贴到patch的1098行后,发现apply时报了patch的语法错误问题;

该错误指出问题在patch的1098行,正好是前面修改的行,到此需要说明patch文件内容的一个语法说明,

在patch的内容中第一列是有特殊意义的,目前本人已知有三个字符:

‘+’         这是增加的内容行

‘-’          这是删除的内容行

‘ ’          这是原始内容的行

因为前面的做法是直接复制当前文件的内容到patch文件,所以解决方式便是在patch的复制内容的那一行的第一列增加一个空格字(‘ ’)符即可;如下图 apply 时不再报错;

 emac_main.c 3344行的错误已解决,接着看看这个冲突,phy..h的126行;

以下是第三种情况:patch中的内容的改动有新增的行,也有删除行(解决方式是去掉patch中多余的删除行,再适当更改patch中新增行的内容);

由patch文件的1926行可知,从126行开始的原文件的8行内容,更新后的文件也是126行开始的8行内容,8 - 8 = 0 表明没有新增行或删除行,而是更改了行的内容;从前面搜索的内容(patch的原文件)与当前文件对比,可知多了一行(//#define PHY_STATE_TIME        1),且另一行的数字不一样(当前文件是1,patch的原文件是3),所以可以直接删掉patch中的1930行;而patch的1932行新增的一行内容实际在当前文件中已经存在,所以可看出该段的内容其实可以去掉(这段patch对当前文件无实际意义),为了演示解决patch的冲突,现将该行的数字改为其他值;即现在需要更改patch的三处:

1926行改成-126,7 +126,8去掉patch中的1930行将patch中的1932行的数字改成其他值

如图所示修改了三处的patch文件,再次apply时,不再报错;

原计划要解决这个问题的,下图25行和26的错误(已经解决过,太久了忘了怎么解决的了,也不再有环境,先记录着,下次再来解释) 

(未完~待续)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3